#ifndef COLUMN_H
#define COLUMN_H

#include <string>

using namespace std;

/*
    Class: Column
    Abstract class that represents a colum.
*/
class Column
{
    /* Section: public */
    public:
        /*
            Destructor: Default destructor.
            Destroy the object.
        */
        virtual ~Column();

        /*
            Constructor: Copy constructor.
            Initializes the object as a copy oh other Column object.
        */
        Column(const Column& other);

        /*
            Constructor: Parametrized constructor.
            Initializes the object with the name specified.

            Parameters:
                name - Name of the column ("" by default).
        */
        Column(const string & name = "");

        /*
            Method: getName
            Returns:
                The name of the column.
        */
        virtual string getName();

        /*
            Method: setName
            Sets the name of the column.

            Parameters:
                name - Name of the columns to set.
        */
        virtual void setname(const string & name);

        /*
            Method: toString
            Returns:
                A string representation of the column.
        */
        virtual string toString();

        /*
            Method: clone
            Returns:
                A clone of this object.
        */
        virtual Column * clone();

    /* Section: protected */
    protected:
        /*
            Variable: name
            Type: string
            Name of the column.
        */
         string name;
};

#endif // COLUMN_H
